#pragma once
extern "C" {
  #include <ctime>
  #ifdef _WIN32
  #include <Windows.h>
  #else
  #error Please replace anything depend windows or replace your computer. Hope you use it happily.Enjoy! :)
  #endif
}
#define PROPERTY(t,n)  __declspec( property ( put = property__set_##n, get = property__get_##n ) ) t n; typedef t property__tmp_type_##n
#define READONLY_PROPERTY(t,n) __declspec( property (get = property__get_##n) ) t n; typedef t property__tmp_type_##n
#define WRITEONLY_PROPERTY(t,n) __declspec( property (put = property__set_##n) ) t n; typedef t property__tmp_type_##n

#define GET(n) property__tmp_type_##n property__get_##n()
#define SET(n) void property__set_##n(const property__tmp_type_##n& value)

#ifdef _DEBUG
#define DebugLog(info) \
  { std::cout << info; }
#define DebugLogWarning(info) \
  {                                                                \
    SetConsoleTextAttribute(                                       \
        GetStdHandle(STD_OUTPUT_HANDLE),                           \
        FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); \
    std::cout << info;                                             \
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),       \
                            FOREGROUND_INTENSITY);                 \
  }
#define DebugLogError(info) \
{                                                                \
    SetConsoleTextAttribute(                                       \
        GetStdHandle(STD_OUTPUT_HANDLE),                           \
        FOREGROUND_INTENSITY | FOREGROUND_RED); \
    std::cout << info;                                             \
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),       \
                            FOREGROUND_INTENSITY);                 \
  }
#else 
#define DebugLog(info)
#define DebugLogError(info)
#endif

#define _ITF (*item->transform)
